<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>电话簿管理系统 - 答辩讲解大纲</title>
    <style>
        body {
            font-family: '微软雅黑', Arial, sans-serif;
            line-height: 1.6;
            margin: 20px;
            background-color: #f9f9f9;
        }

        .container {
            max-width: 900px;
            margin: 0 auto;
            background: white;
            padding: 30px;
            border-radius: 8px;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        }

        h1 {
            color: #333;
            text-align: center;
            border-bottom: 2px solid #007acc;
            padding-bottom: 10px;
        }

        h2 {
            color: #007acc;
            border-left: 4px solid #007acc;
            padding-left: 15px;
            margin-top: 30px;
        }

        h3 {
            color: #555;
            margin-top: 20px;
        }

        .code {
            background-color: #f4f4f4;
            border: 1px solid #ddd;
            border-radius: 4px;
            padding: 15px;
            margin: 10px 0;
            font-family: 'Consolas', monospace;
            overflow-x: auto;
        }

        .highlight {
            background-color: #fff3cd;
            border-left: 4px solid #ffc107;
            padding: 10px;
            margin: 10px 0;
        }

        table {
            width: 100%;
            border-collapse: collapse;
            margin: 15px 0;
        }

        th,
        td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }

        th {
            background-color: #f2f2f2;
            font-weight: bold;
        }

        ul,
        ol {
            margin: 10px 0;
            padding-left: 30px;
        }

        .section {
            margin-bottom: 25px;
        }
    </style>
</head>

<body>
    <div class="container">
        <h1>电话簿管理系统 - 答辩讲解大纲</h1>

        <div class="section">
            <h2>一、项目概述</h2>
            <h3>1.1 项目背景</h3>
            <ul>
                <li>开发一个简单的电话簿管理系统</li>
                <li>实现联系人信息的基本管理功能</li>
                <li>采用Java语言，控制台界面</li>
                <li>支持数据持久化存储</li>
            </ul>

            <h3>1.2 主要功能</h3>
            <ul>
                <li>添加联系人（姓名、性别、年龄、地址、电话、邮箱）</li>
                <li>删除联系人（按姓名删除、精确删除）</li>
                <li>修改联系人信息</li>
                <li>查找联系人（模糊查找、精确查找）</li>
                <li>显示所有联系人</li>
                <li>数据文件存储</li>
            </ul>
        </div>

        <div class="section">
            <h2>二、系统设计</h2>
            <h3>2.1 系统架构</h3>
            <div class="code">
                PhoneBookMain.java - 主程序类（用户界面层）
                PhoneBookManager.java - 管理接口（业务规范层）
                PhoneBookManagerImpl.java - 实现类（业务逻辑层）
                Contact.java - 联系人类（数据模型层）
            </div>

            <h3>2.2 设计思想</h3>
            <ul>
                <li><strong>分层设计</strong>：界面层、业务层、数据层分离</li>
                <li><strong>接口编程</strong>：定义接口规范，便于扩展</li>
                <li><strong>面向对象</strong>：封装、继承、多态的应用</li>
                <li><strong>数据验证</strong>：确保数据完整性和有效性</li>
            </ul>
        </div>

        <div class="section">
            <h2>三、核心代码讲解</h2>

            <h3>3.1 Contact.java - 联系人实体类</h3>
            <div class="highlight">
                <strong>关键点：</strong>
                <ul>
                    <li>实现Serializable接口，支持序列化</li>
                    <li>私有属性，公共getter/setter方法</li>
                    <li>数据验证逻辑</li>
                    <li>重写equals、hashCode、toString方法</li>
                </ul>
            </div>

            <div class="code">
                // 核心属性
                private String name, gender, address, phoneNumber, email;
                private int age;

                // 数据验证示例
                public void setName(String name) {
                if (name == null || name.trim().isEmpty())
                throw new IllegalArgumentException("姓名不能为空");
                this.name = name.trim();
                }

                // 信息完整性验证
                public boolean isValid() {
                return name != null && !name.trim().isEmpty() &&
                gender != null && (gender.equals("男") || gender.equals("女")) &&
                age >= 0 && age <= 150 && phoneNumber !=null && !phoneNumber.trim().isEmpty(); } </div>

                    <h3>3.2 PhoneBookManager.java - 业务接口</h3>
                    <div class="highlight">
                        <strong>接口设计原则：</strong>
                        <ul>
                            <li>定义系统应该具备的所有功能</li>
                            <li>只声明方法签名，不包含实现</li>
                            <li>便于后续功能扩展和维护</li>
                        </ul>
                    </div>

                    <table>
                        <tr>
                            <th>方法名</th>
                            <th>功能说明</th>
                            <th>返回类型</th>
                        </tr>
                        <tr>
                            <td>addContact(Contact contact)</td>
                            <td>添加联系人</td>
                            <td>boolean</td>
                        </tr>
                        <tr>
                            <td>deleteContact(String name)</td>
                            <td>删除联系人</td>
                            <td>boolean</td>
                        </tr>
                        <tr>
                            <td>updateContact(String oldName, Contact newContact)</td>
                            <td>更新联系人</td>
                            <td>boolean</td>
                        </tr>
                        <tr>
                            <td>findContactsByName(String name)</td>
                            <td>查找联系人</td>
                            <td>List&lt;Contact&gt;</td>
                        </tr>
                        <tr>
                            <td>getAllContacts()</td>
                            <td>获取所有联系人</td>
                            <td>List&lt;Contact&gt;</td>
                        </tr>
                    </table>

                    <h3>3.3 PhoneBookManagerImpl.java - 业务实现类</h3>
                    <div class="highlight">
                        <strong>核心实现：</strong>
                        <ul>
                            <li>使用ArrayList存储联系人数据</li>
                            <li>实现接口中定义的所有方法</li>
                            <li>文件I/O操作实现数据持久化</li>
                            <li>重复数据检测和异常处理</li>
                        </ul>
                    </div>

                    <div class="code">
                        // 数据存储
                        private List&lt;Contact&gt; contacts = new ArrayList&lt;&gt;();

                        // 添加联系人实现
                        public boolean addContact(Contact contact) {
                        if (contact == null || !contact.isValid()) return false;

                        // 检查重复
                        for (Contact c : contacts) {
                        if (c.getName().equals(contact.getName()) &&
                        c.getPhoneNumber().equals(contact.getPhoneNumber())) {
                        return false;
                        }
                        }

                        contacts.add(contact);
                        saveToFile();
                        return true;
                        }

                        // 模糊查找实现
                        public List&lt;Contact&gt; findContactsByName(String name) {
                        List&lt;Contact&gt; result = new ArrayList&lt;&gt;();
                        for (Contact c : contacts) {
                        if (c.getName().toLowerCase().contains(name.trim().toLowerCase())) {
                        result.add(c);
                        }
                        }
                        return result;
                        }
                    </div>

                    <h3>3.4 文件操作实现</h3>
                    <div class="code">
                        // 保存到文件（CSV格式）
                        public boolean saveToFile() {
                        try (PrintWriter writer = new PrintWriter(new FileWriter(dataFile))) {
                        for (Contact c : contacts) {
                        writer.printf("%s,%s,%d,%s,%s,%s%n",
                        c.getName(), c.getGender(), c.getAge(),
                        c.getAddress() != null ? c.getAddress() : "",
                        c.getPhoneNumber(),
                        c.getEmail() != null ? c.getEmail() : "");
                        }
                        return true;
                        } catch (IOException e) {
                        return false;
                        }
                        }

                        // 从文件加载
                        public boolean loadFromFile() {
                        try (BufferedReader reader = new BufferedReader(new FileReader(dataFile))) {
                        String line;
                        contacts.clear();
                        while ((line = reader.readLine()) != null) {
                        String[] parts = line.split(",", 6);
                        if (parts.length >= 5) {
                        // 解析数据创建Contact对象
                        Contact contact = new Contact(parts[0], parts[1],
                        Integer.parseInt(parts[2]), parts[3], parts[4],
                        parts.length > 5 ? parts[5] : null);
                        if (contact.isValid()) contacts.add(contact);
                        }
                        }
                        return true;
                        } catch (IOException | NumberFormatException e) {
                        return false;
                        }
                        }
                    </div>

                    <h3>3.5 PhoneBookMain.java - 主程序类</h3>
                    <div class="highlight">
                        <strong>主要职责：</strong>
                        <ul>
                            <li>程序入口点（main方法）</li>
                            <li>用户界面交互</li>
                            <li>菜单显示和选择处理</li>
                            <li>调用业务逻辑方法</li>
                        </ul>
                    </div>

                    <div class="code">
                        // 主程序循环
                        public static void main(String[] args) {
                        PhoneBookManagerImpl manager = new PhoneBookManagerImpl();
                        Scanner scanner = new Scanner(System.in);

                        while (true) {
                        // 显示菜单
                        System.out.println("\n=== 电话簿管理系统 ===");
                        System.out.println("1. 添加联系人 2. 删除联系人 3. 修改联系人");
                        System.out.println("4. 查找联系人 5. 显示所有联系人 6. 退出");

                        int choice = scanner.nextInt();
                        scanner.nextLine();

                        try {
                        switch (choice) {
                        case 1: addContact(manager, scanner); break;
                        case 2: deleteContact(manager, scanner); break;
                        // ... 其他case
                        case 6: return;
                        default: System.out.println("无效选择！");
                        }
                        } catch (Exception e) {
                        System.out.println("操作失败: " + e.getMessage());
                        }
                        }
                        }
                    </div>
            </div>

            <div class="section">
                <h2>四、技术要点</h2>

                <h3>4.1 面向对象特性应用</h3>
                <ul>
                    <li><strong>封装</strong>：Contact类的私有属性和公共方法</li>
                    <li><strong>继承</strong>：实现Serializable接口</li>
                    <li><strong>多态</strong>：接口与实现类的分离</li>
                </ul>

                <h3>4.2 Java核心技术</h3>
                <ul>
                    <li><strong>集合框架</strong>：ArrayList的使用</li>
                    <li><strong>异常处理</strong>：try-catch-finally机制</li>
                    <li><strong>文件I/O</strong>：FileWriter、FileReader的使用</li>
                    <li><strong>字符串处理</strong>：split、trim、contains等方法</li>
                </ul>

                <h3>4.3 程序设计模式</h3>
                <ul>
                    <li><strong>MVC模式</strong>：界面、业务逻辑、数据分离</li>
                    <li><strong>接口编程</strong>：面向接口而非实现编程</li>
                    <li><strong>单一职责</strong>：每个类职责明确</li>
                </ul>
            </div>

            <div class="section">
                <h2>五、运行演示</h2>

                <h3>5.1 Eclipse运行步骤</h3>
                <ol>
                    <li>导入项目到Eclipse工作空间</li>
                    <li>确保所有.java文件在src目录下</li>
                    <li>右键PhoneBookMain.java → Run As → Java Application</li>
                    <li>在控制台进行交互操作</li>
                </ol>

                <h3>5.2 功能演示要点</h3>
                <ul>
                    <li>演示添加联系人功能，展示数据验证</li>
                    <li>演示查找功能，说明模糊匹配算法</li>
                    <li>演示删除和修改功能</li>
                    <li>展示数据持久化效果（重启程序数据仍存在）</li>
                    <li>演示异常处理（输入无效数据的处理）</li>
                </ul>
            </div>

            <div class="section">
                <h2>六、项目总结</h2>

                <h3>6.1 项目优点</h3>
                <ul>
                    <li>代码结构清晰，易于理解和维护</li>
                    <li>功能完整，满足基本需求</li>
                    <li>数据验证完善，程序健壮性好</li>
                    <li>支持数据持久化，用户体验良好</li>
                </ul>

                <h3>6.2 技术收获</h3>
                <ul>
                    <li>掌握了Java面向对象编程思想</li>
                    <li>学会了接口设计和实现</li>
                    <li>熟悉了文件I/O操作</li>
                    <li>理解了异常处理机制</li>
                    <li>掌握了集合框架的使用</li>
                </ul>

                <h3>6.3 改进方向</h3>
                <ul>
                    <li>可以添加图形用户界面（GUI）</li>
                    <li>支持数据库存储</li>
                    <li>增加更多查找条件</li>
                    <li>添加数据导入导出功能</li>
                    <li>支持联系人分组管理</li>
                </ul>
            </div>

            <div class="section">
                <h2>七、答辩准备</h2>

                <h3>7.1 可能的问题</h3>
                <ul>
                    <li><strong>为什么选择这种架构设计？</strong></li>
                    <li><strong>如何保证数据的完整性？</strong></li>
                    <li><strong>文件存储有什么优缺点？</strong></li>
                    <li><strong>如何处理并发访问问题？</strong></li>
                    <li><strong>程序有哪些可以优化的地方？</strong></li>
                </ul>

                <h3>7.2 回答要点</h3>
                <ul>
                    <li>强调分层设计的优势</li>
                    <li>说明数据验证的重要性</li>
                    <li>解释接口编程的好处</li>
                    <li>展示异常处理的完善性</li>
                    <li>提及未来改进的方向</li>
                </ul>
            </div>

            <hr>
            <p style="text-align: center; color: #666; margin-top: 30px;">
                <em>电话簿管理系统 - 答辩讲解大纲</em>
            </p>
        </div>
</body>

</html>